原帖 | 花烛想迟到 | 2025-05-29 00:35 | 👍1 | 阅读约1
Q: 在网上看到 AAPCS 标准要求函数和中断入口时,栈指针要 8 字节对齐。但我用课程的那个 fault_demo 试了一下,看地址上感觉函数入口时 MSP 是 不是 8 字节对齐,而是 4 字节对齐,跳转也没问题。
A:有时候编译器会优化,减少压栈。函数 A 调用函数 B 时,第 1 张图因为函数 B 没有使用栈空间,所以在调用入口,编译器就没有强行使栈指针 8 字节对齐。第二张图给函数 B 多加了几行代码,编译器在识别可能函数 B 需要动用栈空间了,就给栈加 padding,使函数 B 入口时的指针对齐 8 字节了。
函数传参所遵循的正是 AAPCS 调用约定,参数如何传递的讨论见 老师,请教下,单片机启动的时候是先用内部晶振。


相关笔记